package com.lanou3g.code0510.mvc;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.Properties;

/**
 * Created by dllo on 18/5/10.
 */
//登录注册的小实例解释:View-controller-Model(view里有controller对象,controller里有Model对象
//如果model有问题被删除,会导致它们三个都被删,M影响C,C影响V,这叫耦合;通过接口和反射,实现结藕)
    //以这个登录的小例子来解释反射的好处,1.比如两人同时再写View和controller,写view的人就不需要等写controller
    //的人写完再写,他可以直接写,然后通过配置文件来使用controller
    //2.比如你要在controller里增加新的东西,就会导致view需要改动,通过反射则不需要,他可以直接通过配置文件
    //使用你改动后写的新的实现类,不需要再private Controller controller = new 你的实现类名();,而且这样
    //会改动源码
public class View {
    private Controller controller;

    public View() {
        Properties properties = new Properties();
        try {
            InputStream is = new FileInputStream("conf.properties");
            properties.load(is);
            //通过反射来创建对象
            String clazzName = properties.getProperty("controller");
            Class clazz = Class.forName(clazzName);//第二种反射方法:通过字符串获取类类型
            controller = (Controller) clazz.newInstance();
            is.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

    public void login() {
        controller.login();
    }

    public static void main(String[] args) {
        View view = new View();
        view.login();
    }
}
